package com.googlecode.util.codecheck;

/**
 * Created by IntelliJ IDEA.
 * User: Howard
 * Date: 2009-4-10
 * Time: 16:44:04
 * To change this template use File | Settings | File Templates.
 */

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ImageCodeMakerServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //首先设置页面不缓存
        response.setHeader("Pargma", "No-cache");
        response.setHeader("Cache-Control", "no-cache");
        response.setDateHeader("Expires", 0);

        //定义图片的宽度和高度
        int width = 90;
        int height = 40;
        //创建一个图片对象
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        //得到图象的环境对象
        Graphics g = image.createGraphics();
        Random random = new Random();
        //用随机颜色填充图象背景
        g.setColor(getRandColor(180, 250));
        g.fillRect(0, 0, width, height);
        for (int i = 0; i < 5; i++) {
            g.setColor(getRandColor(50, 100));
            int x = random.nextInt(width);
            int y = random.nextInt(height);
            g.drawOval(x, y, 4, 4);
        }
        g.setFont(new Font("", Font.PLAIN, 40));//设置字体，下面准备随机数
        String sRand = "";
        for (int i = 0; i < 4; i++) {
            String rand = String.valueOf(random.nextInt(10));
            sRand += rand;
            //生成随机颜色
            g.setColor(new Color(20 + random.nextInt(80), 20 + random.nextInt(100), 20 + random.nextInt(90)));
            g.drawString(rand, (17 + random.nextInt(3)) * i + 8, 34);
            for (int k = 0; k < 12; k++) {
                int x = random.nextInt(width);
                int y = random.nextInt(height);
                int x1 = random.nextInt(9);
                int y1 = random.nextInt(9);
                g.drawLine(x, y, x + x1, y + y1);
            }
        }
        request.getSession().setAttribute("randcode", sRand);
        g.dispose();
        ImageIO.write(image, "JPEG", response.getOutputStream());//输出图象到页面
    }

    public Color getRandColor(int fc, int bc) {
        Random random = new Random();
        if (fc > 255) {
            fc = 255;
        }
        if (bc > 255) {
            bc = 255;
        }
        int r = fc + random.nextInt(bc - fc);
        int g = fc + random.nextInt(bc - fc);
        int b = fc + random.nextInt(bc - fc);

        return new Color(r, g, b);
    }
}